// See more: http://www.codebit.cn/pub/html/javascript/tutorial/javascript_some/

/**
 * array.some(callback[, thisObject]).
 * 		callback: 要对每个数组元素执行的回调函数. 
 * 		thisObject: 在执行回调函数时定义的this对象. 
 * 
 */
function isBigEnough(element, index, array) {
	return (element >= 10);
}
[2, 5, 8, 1, 4].some(isBigEnough); // false
[12, 5, 8, 1, 4].some(isBigEnough);// true

/**
 * array.every(callback[, thisObject]).
 * 
 */
function isBigEnough(element, index, array) {
	return (element >= 10);
}
[12, 5, 8, 130, 44].every(isBigEnough); // false
[12, 54, 18, 130, 44].every(isBigEnough);// true

/**
 * array.map(callback[, thisObject]).
 * 
 */
var strings = ["hello", "Array", "WORLD"];
function makeUpperCase(v) {
	return v.toUpperCase();
}
var uppers = strings.map(makeUpperCase); // HELLO, ARRAY, WORLD and strings is unchanged.

/**
 * array.filter(callback[, thisObject]).
 * 
 */
function isBigEnough(element, index, array) {
	return (element >= 10);
}
[12, 5, 8, 130, 44].filter(isBigEnough); // 12, 130, 44

/**
 * array.lastIndexOf(searchElement[, fromIndex]).
 * 		searchElement: 要搜索的元素.
 * 		fromIndex: 开始搜索的位置, 默认为数组的长度(length), 在这样的情况下, 将搜索所有的数组元素. 
 * 			如果传入的值大于或等于数组的范围(length), 将搜索整个数组, 如果传入的值小于 0, 将返回 -1, 在这样的情况下, 搜索操作将不被执行. 
 * 			搜索是反方向进行的. 
 * 
 */
var array = [2, 5, 9, 2];
array.lastIndexOf(2); // 3
array.lastIndexOf(7); // -1
array.lastIndexOf(2, 3);// 3
array.lastIndexOf(2, 2);// 0
array.lastIndexOf(2, -2);// 0
array.lastIndexOf(2, -1);// 3

/**
 * array.indexOf(searchElement[, fromIndex]).
 * 		searchElement: 要搜索的元素.
 * 		fromIndex: 开始搜索的位置, 默认为 0, 在这样的情况下, 将搜索所有的数组元素. 
 * 		如果传入的值大于或等于数组的范围(length), 将返回 -1, 在这样的情况下, 搜索操作将不被执行. 如果传入的值小于 0, 仍然会搜索整个数组. 
 * 
 */
var array = [2, 5, 9];
array.indexOf(2);// 0
array.indexOf(7);// -1

/**
 * array.forEach(callback[, thisObject]).
 * 
 */
function printElt(element, index, array) {
	document.writeln("[" + index + "] is " + element + "<br />");
}
[2, 5, 9].forEach(printElt);
// [0] is 2
// [1] is 5
// [2] is 9

var writer = {
	sb			: [],
	write		: function(s) {
		this.sb.push(s);
	},
	writeln		: function(s) {
		this.write(s + "<br />");
	},
	toString	: function() {
		return this.sb.join("");
	}
};

[2, 5, 9].forEach(writer.writeln, writer);
document.writeln(writer.toString());
// 2
// 5
// 9
